package org.slim3.controller;

import java.util.ResourceBundle;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import com.appspot.bs24event.common.Constants;
import com.appspot.bs24event.common.Constants.USER_AGENT;

/**
 * BaseControllerクラス。
 * @version $Id: BaseController.java 181 2011-08-12 03:25:33Z bs24event@gmail.com $
 */
public class BaseController extends Controller {

    /** ログ */
    protected static final Logger logger = Logger.getLogger(BaseController.class.getName());

    /** リソースバンドル */
    private static ResourceBundle settingProperties = ResourceBundle.getBundle("setting");

    @Override
    protected Navigation run() throws Exception {
        return null;
    }

    /**
     * モバイル、スマートフォン用のJSPに遷移を振り分ける。
     * モバイル、スマートフォンページの表示を直接指定したい場合に使用。
     *
     * @param request
     * @param path
     * @return
     */
    protected Navigation forward(HttpServletRequest request, String path, boolean smartphoneFlg, boolean mobileFlg) {
        // セッションからUser-Agentの取得
        HttpSession session = request.getSession(true);
        USER_AGENT userAgent = null;

        if ( session.getAttribute(Constants.USER_AGENT) instanceof USER_AGENT ) {
            userAgent = (USER_AGENT)session.getAttribute(Constants.USER_AGENT);
        }

        if ( smartphoneFlg && (USER_AGENT.ANDROID.equals(userAgent) || USER_AGENT.IPHONE.equals(userAgent)) ) {
            // スマートフォン用画面へ
            path = path.replaceAll(".jsp", "_s.jsp");
        } else if ( mobileFlg && (USER_AGENT.DOCOMO.equals(userAgent) || USER_AGENT.SOFTBANK.equals(userAgent) || USER_AGENT.AU.equals(userAgent)) ) {
            // モバイル用画面へ
            path = path.replaceAll(".jsp", "_m.jsp");
        }
        return super.forward(path);
    }

    /**
     * モバイル、スマートフォン用のJSPに遷移を振り分ける。
     *
     * @param request
     * @param path
     * @return
     */
    protected Navigation forward(HttpServletRequest request, String path) {
        // プロパティ値を取得
        boolean smartphoneFlg = Boolean.parseBoolean(settingProperties.getString("smartphone.flg"));
        boolean mobileFlg     = Boolean.parseBoolean(settingProperties.getString("mobile.flg"));

        return forward(request, path, smartphoneFlg, mobileFlg);
    }

}
